package cn.wu.jishupeizhi.redisTest;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.ArrayList;
import java.util.List;
@SpringBootTest
@RunWith(SpringRunner.class) // 确保测试类在 Spring 上下文中运行
public class RedisList {

    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

    @Test
    public void redisListAdd() {
        // 创建一个列表
        List<String> list = new ArrayList<>();
        list.add("list1实现");
        list.add("list2实现");
        list.add("list3实现");

        // 将列表中的元素逐个插入到Redis List中
        for (String s : list) {
            System.out.println("Inserting into Redis List: " + s);
            redisTemplate.opsForList().rightPush("listTest", s);
        }

        // 验证插入成功
        Long size = redisTemplate.opsForList().size("listTest");
        System.out.println("Redis List Size: " + size);
    }
    @Test
    public void redisListGet() {
        // 从Redis中获取列表中的元素
        List<Object> list = redisTemplate.opsForList().range("listTest", 0, -1);

        // 遍历并打印列表中的元素
        System.out.println("Elements from Redis List Site:"+list.size());
        for (Object obj : list) {
            System.out.println("Element from Redis List: " + obj);
        }
    }
    /**
     * 测试方法：redisListDel
     * 该方法用于从Redis列表中删除指定的元素。
     * 具体流程如下：
     * 1. 从Redis中获取指定列表的所有元素。
     * 2. 遍历列表，查找与指定值匹配的元素。
     * 3. 如果找到匹配的元素，则从列表中删除该元素。
     *
     * 该方法没有参数，也没有返回值。
     */
    @Test
    public void redisListDel() {
        // 从Redis中获取列表中的所有元素
        List<Object> list = redisTemplate.opsForList().range("listTest", 0, -1);

        // 遍历列表，查找并删除指定元素
        for (int i = 0; i < list.size(); i++) {
            Object o = list.get(i);
            if (o.equals("list1实现")) {
                System.out.println("删除 " + o);
                // 从Redis列表中删除匹配的元素
                redisTemplate.opsForList().remove("listTest", i, o);
            }else {
                System.out.println("else:"+o);
            }
        }
    }

}
